/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/

package Modelo;

import ADMINISTRACION_MODELO.ADM_TIPO_ACTIVO_FUNGIBLE;
import ADMINISTRACION_MODELO.ADM_TIPO_ACT_FUN_USU;
import Conexion.Conexion;
import RRHH_Modelo.RHH_CONTRATO_DIRECTO;
import RRHH_Modelo.RHH_CUENTAS;
import RRHH_Modelo.RHH_DATOS;
import RRHH_Modelo.RHH_FECHAS_HITO;
import RRHH_Modelo.RHH_PERSONA;
import RRHH_Modelo.RHH_PERSONA_DATOS;
import RRHH_Modelo.RHH_PERSONA_PROFESION;
import RRHH_Modelo.RHH_SALARIO_MINIMO;
import RRHH_Modelo.RHH_TELEFONOS;
import RRHH_Modelo.RHH_USUARIO;
import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.StringTokenizer;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.util.Base64;
import org.apache.poi.util.IOUtils;

/**
 *
 * @author equipo_2
 */
public class SIS_EVENTOS {
    private FTPClient client;
    
    public SIS_EVENTOS() throws IOException {
        client = new FTPClient();
        client.connect("192.168.0.101");
        client.enterLocalPassiveMode();
        client.login("postulado","oracle123");
        client.setFileType(FTP.BINARY_FILE_TYPE);
    }
    
    
    
    public  void bajarDocumentos(String ci,String documento,String direccionLocal) throws IOException{
            //client.setFileType(FTP.BINARY_FILE_TYPE);
            //client.enterLocalActiveMode();
           // filein = client.retrieveFileStream(documento);
            //output = cliente.appendFileStream(archivo);
            //bajo = cliente.retrieveFile(ftpsDto.getArchivoL(), fileout);
    }
    public  boolean subirDocumentos(String ci,String nombre,InputStream in) throws Exception
    {
        boolean encontro=client.changeWorkingDirectory(ci);
        boolean subio;
        if(encontro){
            subio=client.storeFile(nombre, in);
            client.changeToParentDirectory();
        }else{
            client.makeDirectory(ci);
            subio=client.storeFile(nombre, in);
        }
        return subio;
    }
    public String imagenBase64(String ci,String imagen) throws IOException{
        if(imagen ==null || imagen.equals("null"))return "../img/imagen3.jpg";
        boolean encontro=client.changeWorkingDirectory(ci);
        InputStream is = client.retrieveFileStream(imagen);
        String foto="";
        if(is!=null){
            byte[] bytes = IOUtils.toByteArray(is);
            bytes=Base64.encodeBase64(bytes);
            foto=new String(bytes);
            foto="data:image/png;base64,"+foto;
            is.close();
        }else{
            foto="../img/imagen3.jpg";
        }
        client.completePendingCommand();
        if(encontro){
            client.changeToParentDirectory();
        }
        return foto;
    }
    
    public boolean Desconectar() throws IOException
    {
        client.disconnect();
        return true;
    }
    public String abrirDocumento(String ci,String nombre) throws IOException{
        StringTokenizer toke=new StringTokenizer(nombre,".");
        String extencion="";
        while (toke.hasMoreTokens()) {
            extencion=toke.nextToken().toUpperCase();
        }
        if(extencion.equals("PDF") || extencion.equals("DOC")
          || extencion.equals("DOCX") || extencion.equals("XLSX") 
                || extencion.equals("XLS") || extencion.equals("TXT")
                || extencion.equals("PPT") || extencion.equals("PPTX") ){
            bajarDocumentos(ci, nombre, "D:\\");
        }else{
            return imagenBase64(ci, nombre);
        }
        return "";
    }
    public String cargaKardex(String ci,Conexion con)throws Exception{
        RHH_PERSONA persona = new RHH_PERSONA(con);
        persona = persona.Buscar(ci);
        RHH_USUARIO usuario=new RHH_USUARIO(con).BuscarXidPersona(persona.getID());
        RHH_DATOS dato = new RHH_DATOS(con);
        List<RHH_PERSONA_DATOS> listdato = new RHH_PERSONA_DATOS(con).BuscarXidPersona(persona.getID());
        String listaDatos = "";
        for (int i = 0; i < listdato.size(); i++) {
            dato = dato.BuscarXid(listdato.get(i).getID_DATOS());
            listaDatos += "[\"" + listdato.get(i).getID_DATOS() + "\",\"" + listdato.get(i).getDATO() + "\",\"" + dato.getTIPO() + "\",\"" + listdato.get(i).getCADUCIDAD() + "\",\"" + dato.getESTADO_CADUCIDAD() + "\"],";
        }
       
        
        String usu="";
        String sueldo=salarioMinimo(con)+"";
        String contratante="0";
        RHH_FECHAS_HITO fechahito = new RHH_FECHAS_HITO(con);
        fechahito = fechahito.BuscarxUsuarioEvento(3, usuario.getID());
        String fechaContratacion = fechahito.getFECHA();
        fechahito = fechahito.BuscarxUsuarioEvento(21, usuario.getID());
        String fechaFin = "INDETERMINADO";
        if (fechahito != null) {
            fechaFin = fechahito.getFECHA();
        } else {
            fechahito = new RHH_FECHAS_HITO(con);
        }
        String listaTelefono = "";
        String listaCuenta = "";
        String listaActivo = "";

        if(usuario!=null){
            usu=usuario.getUSUARIO();
            sueldo=new RHH_FECHAS_HITO(con).salarioUsuario(usuario.getID())+"";
            RHH_CONTRATO_DIRECTO contratodirecot=new RHH_CONTRATO_DIRECTO(con);
            contratodirecot=contratodirecot.BuscarXcontratado(usuario.getID());
            contratante=contratodirecot.getID_USUARIO_CONTRATANTE()+"";
            RHH_TELEFONOS telefono = new RHH_TELEFONOS(con);
            List<RHH_TELEFONOS> lsTelefono = telefono.buscarxUsuario(usuario.getID());

            for (int i = 0; i < lsTelefono.size(); i++) {
                String option = telefonosDisponible(con);
                if (option.equals("<option value='0'>Sin Corporativo</option>") && lsTelefono.size() > 0) {
                    option = "";
                }
                option = "<option selected='selected' value='" + lsTelefono.get(i).getID() + "'>" + lsTelefono.get(i).getNUMERO() + "</option>" + option;
                listaTelefono += "[\"" + option + "\",\"" + lsTelefono.get(i).getMONTO_CREDITO() + "\"],";
            }
            if (listaTelefono.length() > 0) {
                listaTelefono = listaTelefono.substring(0, listaTelefono.length() - 1);
            }
            RHH_CUENTAS cuenta = new RHH_CUENTAS(con);
            List<RHH_CUENTAS> lscuenta = cuenta.buscarxid(usuario.getID());
            for (int i = 0; i < lscuenta.size(); i++) {
                listaCuenta += "[\"" + lscuenta.get(i).getBANCO() + "\",\"" + lscuenta.get(i).getCUENTA() + "\"],";
            }
            if (listaCuenta.length() > 0) {
                listaCuenta = listaCuenta.substring(0, listaCuenta.length() - 1);
            }
            List<ADM_TIPO_ACT_FUN_USU> listaFun = new ADM_TIPO_ACT_FUN_USU(con).buscarxusuario(usuario.getID());
            for (int i = 0; i < listaFun.size(); i++) {
                ADM_TIPO_ACTIVO_FUNGIBLE af = new ADM_TIPO_ACTIVO_FUNGIBLE(con).buscarXid(listaFun.get(i).getID_TIPO_ACTIVO_FUNGIBLE());
                listaActivo += "[" + af.getID() + "," + listaFun.get(i).getCANTIDAD() + "," + listaFun.get(i).getID_TIPO_ACTIVO_FUNGIBLE() + "],";
            }
            if (listaActivo.length() > 0) {
                listaActivo = listaActivo.substring(0, listaActivo.length() - 1);
            }
        }
        RHH_PERSONA_PROFESION personaProfesion = new RHH_PERSONA_PROFESION(con);
        personaProfesion = personaProfesion.BuscarXpersona(persona.getID());
        String profe = personaProfesion != null ? personaProfesion.getID_PROFESION() + "" : "0";
        String ano = personaProfesion != null ? personaProfesion.getANOS() + "" : "0";
        SIS_EVENTOS even=new SIS_EVENTOS();
        String foto= even.imagenBase64(persona.getCI()+"",persona.getFOTO());
        if (listaDatos.length() > 0) {
            listaDatos = listaDatos.substring(0, listaDatos.length() - 1);
        }
        
        String html = "{\"ci\":\"" + persona.getCI() + "\",\"nombre\":\"" + persona.getPRIMER_NOMBRE()
                + "\",\"nombre2\":\"" + persona.getSEGUNDO_NOMBRE() + "\",\"apellido1\":\"" + persona.getPRIMER_APELLIDO()
                + "\",\"listaactivo\":[" + listaActivo + "],\"apellido2\":\"" + persona.getSEGUNDO_APELLIDO() + "\",\"curriculo\":\"" + persona.getCURRICULUM()
                + "\",\"listabanco\":[" + listaCuenta + "],\"sueldo\":\"" + sueldo+ "\",\"usuario\":\"" + usu+ "\",\"foto\":\"" + foto + "\",\"correo\":\"" + persona.getEMAIL() + "\",\"telefono\":\"" + persona.getTELEFONO()
                + "\",\"listatelefono\":[" + listaTelefono +"],\"contratado\":\"" + fechaContratacion + "\",\"regional\":\"" + persona.getLUGAR_EMISION()+ "\",\"fechafin\":\"" + fechaFin + "\",\"contratante\":\"" + contratante + "\",\"regional\":\"" + persona.getLUGAR_EMISION() + "\",\"ano\":\"" + ano + "\",\"profesion\":\"" + profe + "\",\"listadatos\":[" + listaDatos + "]}";

        return html;
    }
    public double salarioMinimo(Conexion con) throws SQLException{
         RHH_SALARIO_MINIMO salario = new RHH_SALARIO_MINIMO(con);
         return salario.salarioActual();
    }
    public String fechaActual(){
        Calendar ca=new GregorianCalendar();
        SimpleDateFormat sd=new SimpleDateFormat("dd/MM/YYYY");
        return sd.format(ca.getTime());
    }
    private String telefonosDisponible(Conexion con) throws SQLException {
        RHH_TELEFONOS telefono = new RHH_TELEFONOS(con);
        List<RHH_TELEFONOS> listatelefono = telefono.TodosDisponibles();
        String html = "";
        for (int i = 0; i < listatelefono.size(); i++) {
            html += "<option value='" + listatelefono.get(i).getID() + "'>" + listatelefono.get(i).getNUMERO() + "</option>";
        }
        if (html.length() == 0) {
            return "<option value='0'>Sin Corporativo</option>";
        }
        return html;
    }
}


